#ifndef _PROTOCOL_ENCRYPTION_H_H
#define _PROTOCOL_ENCRYPTION_H_H

#include <stdint.h>
#include <string.h>
#include <stdbool.h>

#define READCARD_MAX_NUMBER_OF_CODED_TEXT 16 //读卡最大编码文本长度

#define BOARDCAST_FIX_HEADER 0xEC //广播数据固定头
#define BOARDCAST_FIX_DATA_LEN 11 //广播数据固定头

typedef enum{
    ENCRYPTION_OK,
    ENCRYPTION_ERROR,
    ENCRYPTION_FIX_HEADER_ERROR,
    ENCRYPTION_KEY_ERROR,
    ENCRYPTION_DATA_LEN_ERROR,
    ENCRYPTION_XOR_ERROR,
    ENCRYPTION_TIME_ERROR,
    ENCRYPTION_FIX_FLAG_ERROR,
}ErrorCode_t;

/**
 * @brief 协议加密方法
 * 
 * @param pOriginalData - 原始数据
 * @return uint16_t     - 加密后的数据总长度
 */
extern uint16_t ProtocolEncryption(void *pOriginalData);

/**
 * @brief 协议解密方法
 * 
 * @param pOriginalData - 原始数据
 */
extern void ProtocolDecryption(void *pOriginalData);


/**
 * @brief 广播数据解密方法
 * 
 * @param pBoardcastData - 广播数据
 * @param BoardcastDataLen - 广播数据长度
 * @param pDecryptData - 解密后的数据
 * @return true 
 * @return false 
 */
extern ErrorCode_t BleBoardcastDataDecrypt(uint8_t *pBoardcastData, uint8_t BoardcastDataLen);

#endif
